# -*- coding: utf-8 -*-
import os
import xml.dom.minidom  # 用于格式化xml文本
import logging
logging.basicConfig(
    format='%(asctime)s %(levelname)s %(filename)s:%(lineno)d - %(message)s', level=logging.DEBUG)

PROJ_DIR = "./"  # 在这里设置需要处理的目录


def process_file(path: str):
    # 将当前目录替换为PROJ_DIR，只有最前面那个才是当前目录路径
    path = path.replace(PROJ_DIR, "$PROJ_DIR$\\", 1)
    path = path.replace("/", "\\")  # 目录形式替换为Windows下的样子
    xml_str = "<file>\n<name>%s</name>\n</file>" % path
    # print(xml_str)
    return xml_str


def process_dir(path: str):
    if not os.path.isdir(path):
        logging.error("传入函数%s的参数不是目录" % __name__)
        return
    xml_str = "<group>\n<name>%s</name>\n" % os.path.basename(path)  # 文件夹开头部分
    for content in os.listdir(path=path):
        sub_path = path+"/"+content
        if os.path.isdir(sub_path):  # 如果现在选到的是文件夹
            xml_str += process_dir(sub_path)+"\n"  # 递归地将文件夹的内容加到当前文本中
        else:
            # 如果是文件，则之间处理该文件
            xml_str += process_file(sub_path)+"\n"
            pass  # end if
        pass  # end for
    # 文件夹末尾需要加结束标签
    xml_str += "</group>"
    return xml_str


def process_root_dir(path: str):
    # print(os.path.basename(os.path.abspath(path=path)))
    # xml_str = "<group>\n<name>%s</name>\n" % os.path.basename(
    #     os.path.abspath(path=path))
    xml_str = ""
    for content in os.listdir(path=path):
        sub_path = path+"/"+content
        if not os.path.isdir(sub_path):  # 跳过根目录下的文件
            continue
        xml_str += process_dir(sub_path) + \
            "\n"  # 对根目录下的每个目录做处理，不处理根目录下面的文件
        pass  # end for
    # xml_str += "</group>"
    return xml_str


if __name__ == "__main__":
    xml_str = process_root_dir("./E3640")
    xml_str_with_root = "<root>\n%s\n</root>" % xml_str

    dom = xml.dom.minidom.parseString(xml_str_with_root)
    pretty_xml_str = dom.toprettyxml(indent="    ", newl="")
    print(pretty_xml_str)
